from typing import Optional, TypedDict
from ..baseapp import db
from sqlalchemy import JSON

try:
    from typing import NotRequired
except ImportError:
    from typing_extensions import NotRequired
from docker.types import EndpointConfig


class CreateContainerInfoDict(TypedDict):
    """
    The Container information used when creating a container
    """

    image: str
    name: str
    image: str
    ports: dict[str, int | str]
    network: NotRequired[str]
    networking_config: NotRequired[dict[str, EndpointConfig]]
    environment: dict[str, str]
    command: list[str]
    volumes: list[str]


class ContainerInfoDict(TypedDict):
    """
    传输容器的信息
    """

    id: str
    name: str
    status: str
    image: str  # If container's image has multiple aliases,
    # they will be separated by commas.
    ports: dict[str, int | str]
    network: dict
    environment: dict[str, str]
    command: list[str]
    volumes: list[str]


class UserContainerLink(db.Model):
    """
    记录用户和容器的关系，同时也记录容器所属的开发环境名称
    """

    id = db.Column(db.Integer, primary_key=True)
    host_machine_id = db.Column(
        db.Integer
    )  # 记录宿主机的ip和端口。类似于192.168.10.3:7898
    dev_env_id = db.Column(db.Integer)  # 容器所属的开发环境id
    container_id = db.Column(db.String(100))  # 容器id
    user_id = db.Column(db.Integer)  # 添加: 创建者用户名
    port = db.Column(db.Integer)  # 对外暴露的环境端口，用于访问服务


# 新增：表示单个容器当前的资源使用情况
class ContainerResourceUsageDict(TypedDict):
    """
    表示单个容器当前的 CPU、内存、网络吞吐、磁盘读写等资源使用情况。
    """

    # CPU 使用情况
    cpu_usage_percent: float  # CPU 使用百分比（例如 12.5 表示 12.5%）

    # 内存使用情况 (bytes)
    mem_usage_bytes: int  # 当前内存使用量
    mem_limit_bytes: int  # 内存上限
    mem_usage_percent: float  # 内存使用百分比

    # 网络吞吐 (bytes)
    network_rx_bytes: int  # 接收的数据量
    network_tx_bytes: int  # 发送的数据量

    # 磁盘读写 (bytes)
    disk_read_bytes: int  # 读取数据量
    disk_write_bytes: int  # 写入数据量
